require 'erb'
require 'yaml'
require 'optparse'
require 'fileutils'

def to_h(a)
  Hash[a]
end

def symbolize_keys(val)
  if val.is_a?(Hash)
    to_h(val.map{|k,v| 
      [k.to_sym, symbolize_keys(v)] 
    })
  elsif val.is_a?(Array)
    val = val.map{|v| symbolize_keys(v)}
  else
    val
  end
end
def load_locales(dir)
  locales = {}
  Dir.entries(dir).each do |ent|
    if ent =~ /\.yml$/
      lang = File.basename(ent, ".yml")
      yml = YAML.load_file(File.join(dir, ent))
      if yml
        locales[lang.to_sym] = symbolize_keys(yml)
      else
        locales[lang.to_sym] = {}
      end
    end
  end
  locales
end
def copy(indir, outdir)
  files = Dir.entries(indir).to_a.map{|ent|
    File.join(indir, ent)
  }.select{|ent|
    File.file?(ent)
  }
  FileUtils.copy(files, outdir, preserve: true)
end

DIR = File.dirname(__FILE__)
DEFAULT_LANG = :en
LANG_DIR = File.join(DIR, "locales")
OUTPUT_DIR = File.join(DIR, "..", "assets")
DONT_MAKE_CHANGE = "This file was automatically generated by webgen/gen.rb. Do not make changes to this file manually."
locales = load_locales(LANG_DIR)
template = File.read(File.join(DIR, "templates", "index.html.erb"))
erb = ERB.new(template)
locales.each do |lang, locale|
  output_path = File.join(OUTPUT_DIR, lang == DEFAULT_LANG ? "index.html" : "index.#{lang}.html")
  t = locales[DEFAULT_LANG].merge(locale)
  t[:dont_make_change] = DONT_MAKE_CHANGE
  t[:lang] = lang.to_s
  File.write(output_path, erb.result(binding))
end
copy(File.join(DIR, "assets"), OUTPUT_DIR)
